#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

typedef int ElemType;
typedef struct {
    ElemType *elem;
    int TableLen;
}SSTable;
//初始化顺序表
void ST_Init(SSTable &ST,int len)
{
    ST.TableLen=len;
    ST.elem=(ElemType*)malloc(sizeof(ElemType) * ST.TableLen);
    srand(time(NULL));  //随机生成数
    for (int j = 0; j < ST.TableLen; j++)
    {
        ST.elem[j]=rand() % 100; //为了随机生成的书都在0-99之间
    }
}
void ST_Print(SSTable ST)
{
    for (int i = 0; i < ST.TableLen; ++i) {
        printf("%3d",ST.elem[i]);
    }
    printf("\n");
}
void swap(int &a,int &b)
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}
void SelectSort(ElemType *A,int len)
{
    int min,i,j; //min记录最小元素的下标
    for (i=0; i<len-1; ++i) { //找到从i开始到最后序列的最小元素下标
        min=i; //我们一开始认为i号元素最小
        for (j=i+1; j<len; ++j) { //找到从i开始到最后序列的最小值下标
            if(A[j]<A[min]) //当某个元素A[i]小于最小元素，如果从大到小排序，只需要改成>
            {
                min=j; //将下标j赋值给min，min就记录下来了最小值的下标
            }
        }
        if(min!=i)
        {
            //遍历完毕找到最小值的位置后，与A[i]交换，这样最小值就放到了最前面
            swap(A[i],A[min]);
        }
    }
}
int main() {
    SSTable ST;
    ST_Init(ST,10);
//    ElemType A[10]={64,94,95,79,69,84,18,22,12,78};
//    //内存copy接口，当你copy整型数组，或者浮点型时，使用memcpy，不能用strcpy，初试考memcpy概率很低
//    memcpy(ST.elem,A,sizeof(A)); //这是为了降低调试难度，每次数组数据固定而设计
    ST_Print(ST);
    SelectSort(ST.elem,10);
    ST_Print(ST);
    return 0;
}
